/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package PanelesDePlatos;

import com.google.gson.Gson;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author Karlitox
 */
public class ModificarPlato extends JPanel implements ActionListener, MouseListener
{
    private JPanel panelDatos;
    private JPanel panelTabla;
    private JPanel panelDescripcion;
    private JPanel panelFoto;
    private JLabel labelNombreBox, labelNombre, labelFotoVacia, labelFotoVisible, labelPrecio, labelIngrediente, labelReemplazar,labelPeso, labelAporteCalorico, labelDescripcion, labelRecomendacion, labelFoto;
    private JTextField textoNombre, textoPrecio, textoIngrediente, textoReemplazar,textoPeso, textoAporteCalorico;
    private JTextArea areaDescripcion, areaRecomendacion;
    private JButton buscarFoto, agregarIngrediente, modificarPlato, eliminarIngrediente, reemplazarIngrediente, flechaDerecha, flechaIzquierda;
    private JTable tabla;
    private DefaultTableModel modelo;
    private JScrollPane scroll, scrollDescripcion, scrollRecomendacion;
    private ImageIcon icon;
    private String rutaAbsolutaImg;
    private int filaTabla;
    private int indicePlatoModificado;
    private int indiceTablaModificable;
    private int indiceImagen = 0;
    public JComboBox comboBoxPlatos;
    private JComboBox comboBoxIngredientes;
    private ArrayList<Plato> platos = new ArrayList<Plato>();
    private ArrayList<Plato> platosOrdenados = new ArrayList<Plato>();
    private List<String> ingredientesOrdenados = new ArrayList<String>();
    private ArrayList<String> imagenes;
    private Gson gson = new Gson(); 
    private boolean estaEscrito = false;
    public boolean modificadoPlato = false;
    private Object platoEspecificado;

    public ModificarPlato(ArrayList<String> imagenes) {
        this.setLayout(new BorderLayout());
        this.imagenes = imagenes;
        
        icon = new ImageIcon("src/Resource/sin_foto.PNG");
        ImageIcon icon2 = new ImageIcon(icon.getImage().getScaledInstance(100, 130, Image.SCALE_DEFAULT));
        
        this.panelDatos = new JPanel();
        this.panelDatos.setLayout(new MigLayout());
        
        this.panelTabla = new JPanel();
        this.panelTabla.setLayout(new MigLayout());
        
        this.panelDescripcion = new JPanel();
        this.panelDescripcion.setLayout(new MigLayout());
        
        this.panelFoto = new JPanel();
        this.panelFoto.setSize(new Dimension(10, 10));
        this.panelFoto.setLayout(new MigLayout());
        this.labelFotoVisible = new JLabel(icon2);
        this.panelFoto.add(labelFotoVisible);
        
        this.comboBoxPlatos = new JComboBox();
        this.comboBoxIngredientes = new JComboBox();
        
        this.labelNombreBox = new JLabel("Nombre");
        this.labelNombre = new JLabel("Nombre");
        this.labelFotoVacia = new JLabel("Foto");
        this.labelPrecio = new JLabel("Precio $");
        this.labelIngrediente = new JLabel("Ingrediente");
        this.labelReemplazar = new JLabel("Ingrediente");
        this.labelPeso = new JLabel("Peso Kg");
        this.labelAporteCalorico = new JLabel("Aporte Calórico");
        this.labelDescripcion = new JLabel("Descripción");
        this.labelRecomendacion = new JLabel("Recomendación");
        this.labelFoto = new JLabel();
        
        this.textoNombre = new JTextField(20);
        this.textoPrecio = new JTextField(20);
        this.textoIngrediente = new JTextField(20);
        this.textoReemplazar = new JTextField(10);
        this.textoPeso = new JTextField(20);
        this.textoAporteCalorico = new JTextField(20);
        
        this.areaDescripcion = new JTextArea(5, 25);
        this.areaRecomendacion = new JTextArea(5, 25);
        
        this.buscarFoto = new JButton("Examinar");
        this.agregarIngrediente = new JButton("Agregar");
        this.modificarPlato = new JButton("Modificar Plato");
        this.eliminarIngrediente = new JButton("Eliminar Ingrediente");
        this.reemplazarIngrediente = new JButton("Reemplazar");
        this.flechaDerecha = new JButton();
        this.flechaIzquierda = new JButton();
        this.flechaDerecha.setIcon(new ImageIcon("src/Resource/flecha_derecha.PNG"));
        this.flechaIzquierda.setIcon(new ImageIcon("src/Resource/flecha_izquierda.PNG"));
        
        this.modificarPlato.addActionListener(this);
        this.agregarIngrediente.addActionListener(this);
        this.eliminarIngrediente.addActionListener(this);
        this.buscarFoto.addActionListener(this);
        this.reemplazarIngrediente.addActionListener(this);
        this.flechaDerecha.addActionListener(this);
        this.flechaIzquierda.addActionListener(this);
        
        this.modelo = new DefaultTableModel();
        this.tabla = new JTable(modelo);
        this.tabla.getTableHeader().setReorderingAllowed(false);
        this.tabla.addMouseListener(this);
        this.modelo.addColumn("Nombre Ingredientes");
        this.scroll = new JScrollPane(tabla);
        this.scroll.setViewportView(tabla);
        this.scrollDescripcion = new JScrollPane(areaDescripcion);
        this.scrollRecomendacion = new JScrollPane(areaRecomendacion);
        
        this.panelDatos.add(labelNombreBox);
        
        this.panelDatos.add(comboBoxPlatos);
        this.panelDatos.add(labelPeso);
        this.panelDatos.add(textoPeso);
        this.panelDatos.add(labelReemplazar);
        this.panelDatos.add(comboBoxIngredientes);
        this.panelDatos.add(textoReemplazar);
        this.panelDatos.add(reemplazarIngrediente, "wrap");
        this.panelDatos.add(labelIngrediente);
        this.panelDatos.add(textoIngrediente);
        this.panelDatos.add(agregarIngrediente, "wrap");
        this.panelDatos.add(labelNombre);
        this.panelDatos.add(textoNombre);
        this.panelDatos.add(labelAporteCalorico);
        this.panelDatos.add(textoAporteCalorico);
        this.panelDatos.add(labelIngrediente);
        this.panelDatos.add(textoIngrediente);
        this.panelDatos.add(agregarIngrediente, "wrap");
        this.panelDatos.add(labelPrecio);
        this.panelDatos.add(textoPrecio);
        
        
        this.panelDatos.add(labelFotoVacia);
        this.panelDatos.add(buscarFoto);
        
        this.panelFoto.add(flechaIzquierda);
        this.panelFoto.add(flechaDerecha);
        
        this.panelTabla.add(scroll, "wrap");
        this.panelTabla.add(eliminarIngrediente);
        
        this.panelDescripcion.add(panelFoto, "wrap");
        this.panelDescripcion.add(labelDescripcion, "wrap");
        this.panelDescripcion.add(scrollDescripcion, "wrap");
        this.panelDescripcion.add(labelRecomendacion, "wrap");
        this.panelDescripcion.add(scrollRecomendacion, "wrap");
        this.panelDescripcion.add(modificarPlato);
        
        this.comboBoxPlatos.addActionListener(this);
        
        this.add(panelDatos, BorderLayout.NORTH);
        this.add(panelTabla, BorderLayout.WEST);
        this.add(panelDescripcion, BorderLayout.EAST);
        
        leerPlatosTxt();
//        platosOrdenados();
//        ingredientesOrdenados();
        llenarComboBoxPlatos();
        llenarComboBoxIngredientes();
        
    }
    
    @Override
    public void actionPerformed(ActionEvent e) 
    {
        Object click = e.getSource();
        
        boolean nombreVacio = textoNombre.getText().isEmpty();
        boolean precioVacio = textoPrecio.getText().isEmpty();
        boolean ingredienteVacio = textoIngrediente.getText().isEmpty();
        boolean aporteCaloricoVacio = textoAporteCalorico.getText().isEmpty();
        boolean descripcionVacio = areaDescripcion.getText().isEmpty();
        boolean recomendacionVacio = areaRecomendacion.getText().isEmpty();
        
        if (click == modificarPlato)
        {
            if (nombreVacio || precioVacio || aporteCaloricoVacio ||  //FALTAAA NOMBREEEEEEE!!!
                descripcionVacio || recomendacionVacio || modelo.getRowCount() == 0) //Está vacío?
            {
                JOptionPane.showMessageDialog(this, "Faltan campos por completar y/o ingredientes por agregar, por favor complete todos los campos pedidos y/o agregue ingredientes.");
            }
            else
            {
                String nombre = textoNombre.getText();
                String descripcion = areaDescripcion.getText();
                String recomendacion = areaRecomendacion.getText();
                float peso = Float.parseFloat(textoPeso.getText());
                int precio = Integer.parseInt(textoPrecio.getText());
                int aporteCalorico = Integer.parseInt(textoAporteCalorico.getText());
                
                
                Plato plato = new Plato(nombre, precio, peso, aporteCalorico, descripcion, recomendacion, null, imagenes);
                Object seleccionado = comboBoxPlatos.getSelectedItem();
                modificarIngredientes(plato);
                reemplazarPlatoModificado(plato);
                modificadoPlato = true;
                
                try 
                {
                    vaciarTxt();
                    reescribirTxt();
                } 
                catch (IOException ex) 
                {
                    Logger.getLogger(ModificarPlato.class.getName()).log(Level.SEVERE, null, ex);
                }
                JOptionPane.showMessageDialog(this, "Su plato fue modificado con éxito.");
                eliminarIngredienteBox();
            }
        }
        if (click == agregarIngrediente)
        {
            if (ingredienteVacio)
            {
                JOptionPane.showMessageDialog(this, "No se ha especificado algún ingrediente, por favor agregue un ingrediente.");
            }
            else
            {
                Object[] ingrediente = {textoIngrediente.getText()};
                this.modelo.addRow(ingrediente);
                this.textoIngrediente.setText("");
                this.eliminarIngrediente.setEnabled(true);
                llenarComboBoxIngredientes();
            }
        }
        if (click == eliminarIngrediente)
        {
            this.modelo.removeRow(filaTabla);
        }
        if (click == buscarFoto)
        {
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filtroImagen = new FileNameExtensionFilter("JPG & PNG", "jpg","png");
            chooser.setFileFilter(filtroImagen);
            chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
            int estado = chooser.showOpenDialog(null);
            
            if (estado == JFileChooser.APPROVE_OPTION)
            {
                File archivo = chooser.getSelectedFile();
                rutaAbsolutaImg = archivo.getAbsolutePath();
                ImageIcon imagen = new ImageIcon(archivo.getAbsolutePath());
                ImageIcon imagen2 = imagenRedimensionada(imagen);
                JOptionPane.showMessageDialog(this, "Su imagen fue agregada con éxito");
                imagenes.add(rutaAbsolutaImg);
                indiceImagen++;
                this.labelFotoVisible.setIcon(imagen2);
            }
        }
        if (click == comboBoxPlatos)
        {
            if (comboBoxPlatos.getItemCount() > 0)
            {
                String nombre = comboBoxPlatos.getSelectedItem().toString();
                llenarCamposModificables(nombre);
                habilitarEliminacion();
                platoEspecificado = comboBoxPlatos.getSelectedItem();
            }
        }
        if (click == reemplazarIngrediente)
        {
            if (textoReemplazar.getText().length() > 0) //Si hay texto
            {
                JOptionPane.showMessageDialog(this, "Ingrediente modificado exitosamente");
                String ingredienteSustituto = textoReemplazar.getText().trim();
                String ingredienteOriginal = comboBoxIngredientes.getSelectedItem().toString();
                reemplazarIngrediente(ingredienteSustituto, ingredienteOriginal);
            }
        }
        if (click == flechaDerecha)
        {
            cambiarImagen("derecha");
        }
        if (click == flechaIzquierda)
        {
            cambiarImagen("izquierda");
        }
    }
    
    public void habilitarEliminacion()
    {
        if (modelo.getRowCount() == 0)
        {
            this.eliminarIngrediente.setEnabled(false);
        }
        else
        {
            this.eliminarIngrediente.setEnabled(true);
        }
    }
    
    public void ingredientesOrdenados()
    {
        for (int i=0; i<platosOrdenados.size(); i++) //Recorremos array de platos
        {
            for (int j=0; j<platosOrdenados.get(i).getIngredientes().size(); j++) //Recorremos ingredientes de un plato
            {
                String ingredienteActual = platosOrdenados.get(i).getIngredientes().get(j);
                
                if (!existeNombreIngrediente(ingredienteActual))
                {
                    ingredientesOrdenados.add(ingredienteActual);
                }
            }
        }
        Collections.sort(ingredientesOrdenados);
    }
    
    public boolean existeNombreIngrediente(String ingredienteActual)
    {
        for (int i=0; i<ingredientesOrdenados.size(); i++)
        {
            if (ingredienteActual.equals(ingredientesOrdenados.get(i)))
            {
                return true; //Existe
            }
        }
        return false; //No existe
    }
    
    public boolean existeNombrePlato(String nombrePlatoActual) //Recorremos y preguntamos si el nombre existe, para no repetir
    {
        for (int i=0; i<comboBoxPlatos.getItemCount(); i++)
        {
            if (nombrePlatoActual.equals(comboBoxPlatos.getItemAt(i)))
            {
                return true; //Existe
            }
        }
        return false; //No existe
    }
    
    public void llenarComboBoxPlatos()
    {
        comboBoxPlatos.removeAllItems();
        
        for (int i=0; i<platosOrdenados.size(); i++)
        {
            String nombre = platosOrdenados.get(i).getNombre(); 
            if (!existeNombrePlato(nombre))
            {
                comboBoxPlatos.addItem(nombre);
            }
        }
    }
    
    public void llenarComboBoxIngredientes()
    {
        comboBoxIngredientes.removeAllItems();
        ingredientesOrdenados();
        
        for (int i=0; i<ingredientesOrdenados.size(); i++)
        {
            String nombreIngrediente = ingredientesOrdenados.get(i);
            
            if (!existeIngredienteBox(nombreIngrediente))
            {
                comboBoxIngredientes.addItem(nombreIngrediente);
            }
        }
    }
    
    public boolean existeIngredienteBox(String ingrediente)
    {
        for (int i=0; i<comboBoxIngredientes.getItemCount(); i++)
        {
            if (ingrediente.equals(comboBoxIngredientes.getItemAt(i).toString()))
            {
                return true;
            }
        }
        return false;
    }
    
    public void eliminarIngredienteBox() //Luego de modificar plato, comparamos tabla con box de ingredientes para ver si se ha borrado alguno
    {
        for (int i=0; i<comboBoxIngredientes.getItemCount(); i++)
        {
            String ingrediente = comboBoxIngredientes.getItemAt(i).toString();
            
            if (existeIngredienteTabla(ingrediente))
            {
                comboBoxIngredientes.removeItemAt(i);
            }
        }
    }
    
    public boolean existeIngredienteTabla(String ingrediente)
    {
        for (int i=0; i<tabla.getRowCount(); i++)
        {
            if (ingrediente.equals(modelo.getValueAt(i, 0).toString())) //Si esta, entonces...
            {
                return false; //false para mantener
            }
        }
        return true; //true para borrarlo
    }
        
    public void llenarCamposModificables(String nombre) //dado un nombre del comboBoxPlatos
    {
        if (hayAlgoTxt())
        {
            for (int i=0; i<platosOrdenados.size(); i++)
            {
                if (platosOrdenados.get(i).getNombre().equals(nombre))
                {
                    textoNombre.setText(nombre);
                    textoPrecio.setText(platosOrdenados.get(i).getPrecio()+"");
                    textoAporteCalorico.setText(platosOrdenados.get(i).getAporteCalorico()+"");
                    textoPeso.setText(platosOrdenados.get(i).getPeso()+"");
                    areaDescripcion.setText(platosOrdenados.get(i).getDescripcion());
                    areaRecomendacion.setText(platosOrdenados.get(i).getRecomendacion());
                    updateUI();
                    indicePlatoModificado = i; //Guardamos el indice del plato actual a modificar
                    llenarTablaModificable(i);
                    i = platosOrdenados.size();
                }
            }
        }
    }
    
    public void llenarTablaModificable(int indice)
    {
        while (modelo.getRowCount() > 0)
        {
            modelo.removeRow(0);
        }
        
        for (int i=0; i<platosOrdenados.get(indice).getIngredientes().size(); i++)
        {
            Object[] objeto = new Object[1];
            objeto[0] = (Object)platosOrdenados.get(indice).getIngredientes().get(i); //Ingrediente correspondiente al plato
            modelo.addRow(objeto);
        }
    }
    
    public void modificarIngredientes(Plato plato)
    {
        plato.vaciarIngredientes(); //Vaciamos arraylist de ingredientes
        
        for (int i=0; i<modelo.getRowCount(); i++)
        {
            Object objeto = modelo.getValueAt(i,0);
            String ingrediente = objeto.toString();
            plato.agregarIngrediente(ingrediente);
        }
    }
    public void reemplazarIngrediente(String ingredienteSustituto, String ingredienteOriginal) //Buscamos en todos los platos dicho ingrediente y lo reemplazamos
    {
        for (int i=0; i<platosOrdenados.size(); i++) // i para recorrer arraylist de platos
        {
            editarIngredientePlato(ingredienteOriginal, ingredienteSustituto, i);
        }
    }

    public void editarIngredientePlato(String ingredienteOriginal, String ingredienteSustituto, int indicePlatoActual) //Editamos un ingrediente por un sustituto, revisamos en todos los platos
    {
        for (int i=0; i<platosOrdenados.get(indicePlatoActual).cantidadIngredientes(); i++) //Recorremos arraylist de ingredientes de plato actual
        {
            if (ingredienteOriginal.equals(platosOrdenados.get(indicePlatoActual).getIngredientes().get(i))) //Preguntamos si esta el ingrediente
            {
                platosOrdenados.get(indicePlatoActual).getIngredientes().set(i, ingredienteSustituto); //Settea el ingrediente original correspondiente del plato por el sustituto (del jtextfield)
                int indiceIngreOrdenado = indiceIngredienteOrdenado(i, ingredienteOriginal); //Retorna el indice del comboBoxIngredientes correspondiente al ingrediente que se desea editar
                ingredientesOrdenados.set(indiceIngreOrdenado, ingredienteSustituto);
                textoReemplazar.setText("");
                ingredientesOrdenados(); //Una vez que se edita el ingrediente, volvemos a ordenar todos los ingredientes
                llenarComboBoxIngredientes(); //Actualizar comboBox de ingredientes totales
                llenarTablaModificable(i); //Actualizar tabla de ingredientes segun plato
                
            }
        }
    }
    
    public int indiceIngredienteOrdenado(int indicePlato, String ingredienteOriginal)
    {
        for (int i=0; i<ingredientesOrdenados.size(); i++)
        {
            if (ingredienteOriginal.equals(ingredientesOrdenados.get(i)))
            {
                return i;
            }
        }
        return 0;
    }

    public void reemplazarPlatoModificado(Plato plato) //Buscamos en el arraylist el plato que modificamos y lo reemplazamos por el nuevo
    {
        platosOrdenados.set(indicePlatoModificado, plato);
        updateUI();
    }
    
    public void vaciarTxt() throws IOException
    {
        File archivo = new File("C:\\BaseDeDatos\\platos.txt");
        FileWriter fw = new FileWriter(archivo);
        BufferedWriter bw = new BufferedWriter(fw);
        
        bw.write("");
        bw.close();
    }
    
    public void reescribirTxt()
    {
        for (int i=0; i<platosOrdenados.size(); i++)
        {
            
        }
        try
        {   
            FileWriter writer = new FileWriter("C:\\BaseDeDatos\\platos.txt", true);
            
            for (int i=0; i<platosOrdenados.size(); i++)
            {
                String plato = gson.toJson(platosOrdenados.get(i)); //Transformamos a String un objeto Plato
                writer.write(plato);
                writer.write("\n");
            }
            writer.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    
    public void leerPlatosTxt()
    {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        platos.clear();
        
        try
        {
            archivo = new File("C:\\BaseDeDatos\\platos.txt");
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            
            String linea;
            
            while((linea=br.readLine())!=null)
            {
                Plato plato = (Plato)gson.fromJson(linea, Plato.class);
                platos.add(plato);
            }
            ordenarDePrincipio();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( null != fr )
                {   
                    fr.close();     
                }                  
            }
            catch (Exception e2)
            {
                e2.printStackTrace();
            }
        }
    }
    
    public boolean hayAlgoTxt()
    {
        File archivo = new File("C:\\BaseDeDatos\\platos.txt");
        
        if (archivo.length() == 0)
        {
            return false; //No hay nada
        }
        return true; //Hay algo escrito
    }
    
    public void cambiarImagen(String direccion)
    {
        ImageIcon icon;
        ImageIcon icon2;
        
        if (imagenes.size() > 0)
        {
            if (direccion.equals("derecha"))
            {
                if ((indiceImagen + 1) < imagenes.size()) //Preguntamos si hay una imagen siguiente
                {
                    icon = new ImageIcon(imagenes.get(indiceImagen + 1));
                    icon2 = new ImageIcon(icon.getImage().getScaledInstance(100, 130, Image.SCALE_DEFAULT));
                    labelFotoVisible.setIcon(icon2); //Mostramos la imagen siguiente
                    indiceImagen++;
                }
                else
                {
                    icon = new ImageIcon(imagenes.get(0));
                    icon2 = new ImageIcon(icon.getImage().getScaledInstance(100, 130, Image.SCALE_DEFAULT));
                    labelFotoVisible.setIcon(icon2);
                    indiceImagen = 0;
                }
            }
            else
            {
                if ((indiceImagen - 1) >= 0) //Si aquel indice esta dentro del rango
                {
                    icon = new ImageIcon(imagenes.get(indiceImagen - 1));
                    icon2 = new ImageIcon(icon.getImage().getScaledInstance(100, 130, Image.SCALE_DEFAULT));
                    labelFotoVisible.setIcon(icon2); //Mostramos la imagen anterior
                    indiceImagen--;
                }
                else
                {
                    int indiceUltima = imagenes.size() - 1;
                    icon = new ImageIcon(imagenes.get(indiceUltima));
                    icon2 = new ImageIcon(icon.getImage().getScaledInstance(100, 130, Image.SCALE_DEFAULT));
                    labelFotoVisible.setIcon(icon2);
                    indiceImagen = indiceUltima;
                }
            }
        }
    }
    
    public ArrayList<Plato> getPlatos()
    {
        return this.platos;
    }
    
    public ImageIcon imagenRedimensionada(ImageIcon icon)
    {
        if (icon.getIconHeight() > 100 && icon.getIconHeight() > 130)
        {
            ImageIcon icon2 = new ImageIcon(icon.getImage().getScaledInstance(100, 130, Image.SCALE_DEFAULT));
            return icon2;
        }
        else
        {
            return icon;
        }
    }
    
    public void ordenarDePrincipio() //Rellenamos lista con nombres de platos, la ordenamos y luego tenemos un array tipo Plato ordenado alfabeticamente
    {
        List<String> nombresPlatos = new ArrayList<String>();
        
        for (int i=0; i<platos.size(); i++)
        {
            nombresPlatos.add(platos.get(i).getNombre());
        }
        Collections.sort(nombresPlatos);
        
        for (int i=0; i<nombresPlatos.size(); i++)
        {
            String nombre = nombresPlatos.get(i);
            int indice = indicePlato(nombre);
            platosOrdenados.add(platos.get(indice));
            
        }
    }
    
    public int indicePlato(String nombrePlato)
    {
        for (int i=0; i<platos.size(); i++)
        {
            if (nombrePlato.equals(platos.get(i).getNombre()))
            {
                return i;
            }
        }
        return 0;
    }
    
    public int indiceEnPlatosOrdenados(String plato)
    {
        for (int i=0; i<platosOrdenados.size(); i++)
        {
            if (plato.equals(platosOrdenados.get(i).getNombre()))
            {
                return i;
            }
        }
        return 0;
    }
    
    @Override
    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() == 1)
        {
            this.filaTabla = tabla.rowAtPoint(e.getPoint()); //Obtenemos la fila donde se ha hecho click
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {}

    @Override
    public void mouseReleased(MouseEvent e) {}

    @Override
    public void mouseEntered(MouseEvent e) {}

    @Override
    public void mouseExited(MouseEvent e) {}
}

